In early computer systems, data was stored by individual users on magnetic tapes, punch cards, and early mass-storage devices, with computer users bearing entire responsibility for data availability, data management, and data security. The development of operating systems resulted in development of file systems with operating-system-provided interfaces and additional operating-system-provided utilities, including automated backup, mirroring, and other such utilities. With the development of high-bandwidth and inexpensive electronic communications, rapidly increasing computational bandwidths of computer systems, and relentless increase in price-performance of computer systems, an enormous variety of single-computer and distributed data-storage systems are available that span a wide range of functionality, capacity, and cost.
When data that is stored by a data-storage system has more than immediate, ephemeral utility, and even for certain types of short-lived data, users seek to store data in data-storage systems in a fault-tolerant manner. Modern data-storage systems provide for redundant storage of data, using methods that include data-object mirroring and parity encoding. In the event that a mass-storage device, computer-system node of a multi-node data-storage system, electronic communications medium or system, or other component of a data-storage system fails, any data lost as a result of the failure can be recovered automatically, without intervention by the user, in many modern data-storage systems that redundantly store data. Each of the various different methods for redundantly storing data is associated with different advantages and disadvantages. Developers of data-storage systems, vendors of data-storage systems, and, ultimately, users of data-storage systems and computer systems that access data stored in data-storage systems continue to seek improved data-storage systems that provide automated, redundant data storage and data recovery with maximum efficiency and minimum cost.